package com.java.test;

import com.java.annotation.MyTest;
import com.java.util.ClassUtil;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

public class MyTestParster {

	public static void main(String[] args)  {
		//获取当前的包名
		String packageName = MyTestParster.class.getPackage().getName();
		List<Class<?>> classList = ClassUtil.getClasses(packageName);
		//扫描当前包及其子包下的所有类
		classList.forEach(clazz ->{
			//获得所有的方法
			Method[] methods = clazz.getMethods();
			if(methods!=null){
				//获得注解使用了@MyTest的方法
				for(Method method:methods){
					//判断该方法是否使用了@MyTest注解
					boolean annotationPresent = method.isAnnotationPresent(MyTest.class);
					if(annotationPresent){
						//该方法使用MyTest注解了
						try {
							method.invoke(clazz.newInstance(), null);
						} catch (IllegalAccessException e) {
							e.printStackTrace();
						} catch (InvocationTargetException e) {
							e.printStackTrace();
						} catch (InstantiationException e) {
							e.printStackTrace();
						}
					}
				}
			}
		});
	}
	
}
